package com.control.qct.businesssteward.costom;

import android.graphics.Color;

import com.control.qct.businesssteward.model.TypeStatisticModel;
import com.github.mikephil.charting.animation.Easing;
import com.github.mikephil.charting.charts.PieChart;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.PieData;
import com.github.mikephil.charting.data.PieDataSet;
import com.github.mikephil.charting.data.PieEntry;
import com.github.mikephil.charting.formatter.PercentFormatter;

import java.util.ArrayList;
import java.util.List;

/**
 * 扇形统计表
 * Created by Administrator on 2017/12/27 0027.
 */

public class PieChartShow {

    private List<Integer> mColors;
    private static PieChartShow pieChartShow;

    private PieChartShow() {
        setColors();
    }

    public static PieChartShow getInstance() {
        if (pieChartShow == null) {
            pieChartShow = new PieChartShow();
        }
        return pieChartShow;
    }


    /**
     * 设置默认颜色-- 后期需要再修改
     *
     * @return
     */
    private void setColors() {
        mColors = new ArrayList<Integer>();
        mColors.add(Color.parseColor("#6987FE"));
        mColors.add(Color.parseColor("#FE70AF"));
        mColors.add(Color.parseColor("#C66EFE"));
        mColors.add(Color.parseColor("#65CDFF"));
        mColors.add(Color.parseColor("#FFAB4E"));
        mColors.add(Color.parseColor("#1DD2BC"));
        mColors.add(Color.parseColor("#FF8C9D"));
        mColors.add(Color.parseColor("#FE9507"));
        mColors.add(Color.parseColor("#8CEAFF"));
        mColors.add(Color.parseColor("#FF8C9D"));
    }

    public void show(PieChart pieChart, List<TypeStatisticModel> typeStatisticModelList) {
        //如果启用此选项，则图表中的值将以百分比形式绘制，而不是以原始值绘制
        pieChart.setUsePercentValues(true);
        //如果这个组件应该启用（应该被绘制）FALSE如果没有。如果禁用，此组件的任何内容将被绘制默认
        pieChart.getDescription().setEnabled(false);
        //将额外的偏移量（在图表视图周围）附加到自动计算的偏移量
        pieChart.setExtraOffsets(30, 10, 30, 0);
        //较高的值表明速度会缓慢下降 例如如果它设置为0，它会立即停止。1是一个无效的值，并将自动转换为0.999f。
        pieChart.setDragDecelerationFrictionCoef(0.95f);
        //设置饼图上面的文字是否显示，不显示的话只显示百分比
        pieChart.setDrawEntryLabels(false);
        //设置中间字体
//        pieChart.setCenterText("");
        //设置为true将饼中心清空
        pieChart.setDrawHoleEnabled(true);
        //套孔，绘制在PieChart中心的颜色
        pieChart.setHoleColor(Color.WHITE);
        //设置透明圆应有的颜色。
        pieChart.setTransparentCircleColor(Color.WHITE);
        //设置透明度圆的透明度应该有0 =完全透明，255 =完全不透明,默认值为100。
        pieChart.setTransparentCircleAlpha(110);
        //设置在最大半径的百分比饼图中心孔半径（最大=整个图的半径），默认为50%
        pieChart.setHoleRadius(50f);
        //设置绘制在孔旁边的透明圆的半径,在最大半径的百分比在饼图*（max =整个图的半径），默认55% -> 5%大于中心孔默认
        pieChart.setTransparentCircleRadius(50f);
        //将此设置为true，以绘制显示在pie chart
        pieChart.setDrawCenterText(true);
        //集度的radarchart旋转偏移。默认270f -->顶（北）
        pieChart.setRotationAngle(0);
        //设置为true，使旋转/旋转的图表触摸。设置为false禁用它。默认值：true
        pieChart.setRotationEnabled(false);
        //将此设置为false，以防止由抽头姿态突出值。值仍然可以通过拖动或编程高亮显示。默认值：真
        pieChart.setHighlightPerTapEnabled(false);
        //获取图例对象
        Legend l = pieChart.getLegend();
        //设置垂直对齐of the Legend
        l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
        //设置图例大小
        l.setFormSize(6f);
        //设置使用什么类型的图例
        l.setForm(Legend.LegendForm.CIRCLE);
        //设置水平of the Legend
        l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
        //设置方向
        l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
        //设置是否换行显示
        l.setWordWrapEnabled(true);
        //其中哪一个将画在图表或外
        l.setDrawInside(false);
        //设置水平轴上图例项之间的间距
        l.setXEntrySpace(25f);
        //设置在垂直轴上的图例项之间的间距
        l.setYEntrySpace(5f);
        //设置此轴上标签的所使用的y轴偏移量 更高的偏移意味着作为一个整体的Legend将被放置远离顶部。
        l.setYOffset(5f);
        //设置X轴上的偏移量
        l.setXOffset(10f);

        //设置饼图每一块的说明的字体颜色
        pieChart.setEntryLabelColor(Color.WHITE);
        //设置入口标签的大小。默认值：13dp
        pieChart.setEntryLabelTextSize(12f);
        //PieEntry集合
        List<PieEntry> pieEntryList = new ArrayList<>();
        for (int i = 1; i < typeStatisticModelList.size(); i++) {
            PieEntry pieEntry = new PieEntry((float) typeStatisticModelList.get(i).getSaleTotal(),
                    typeStatisticModelList.get(i)
                    .getTitle());
            pieEntryList.add(pieEntry);
        }

        //设置到PieDataSet对象
        PieDataSet pieDataSet = new PieDataSet(pieEntryList, "");
        pieDataSet.setDrawValues(false);//设置为true，在图表绘制y
        pieDataSet.setAxisDependency(YAxis.AxisDependency.LEFT);//设置Y轴，这个数据集应该被绘制（左或右）。默认值：左
        pieDataSet.setAutomaticallyDisableSliceSpacing(false);//当启用时，片间距将是0时，最小值要小于片间距本身
        pieDataSet.setSliceSpace(0f);//间隔
        pieDataSet.setSelectionShift(10f);//点击伸出去的距离

//        pieDataSet.setValueLinePart1OffsetPercentage(80.f);
//        pieDataSet.setValueLinePart1Length(0.5f);
//        pieDataSet.setValueLinePart2Length(0.5f);
//        pieDataSet.setValueLineColor(Color.parseColor("#e1e1e1"));
//        //当值显示在界面外面的时候是否允许改变量行长度
//        pieDataSet.setValueLineVariableLength(false);
//        //设置线的宽度
//        pieDataSet.setValueLineWidth(1);
//        //设置项X值拿出去
//        pieDataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE);
        //设置将Y轴的值显示位置
        pieDataSet.setYValuePosition(PieDataSet.ValuePosition.INSIDE_SLICE);

        /* *
         * 设置该数据集前应使用的颜色。颜色使用只要数据集所代表的条目数目高于颜色数组的大小。
         * 如果您使用的颜色从资源， 确保颜色已准备好（通过调用getresources().getColor（…））之前，将它们添加到数据集
         * */
        pieDataSet.setColors(mColors);

        //传入PieData
        PieData data = new PieData(pieDataSet);
        //设置Y值是否显示
        data.setDrawValues(true);
        //设置Y值使用自定义形式展示
        data.setValueFormatter(new PercentFormatter());
        //设置饼图上面数据字体的大小
        data.setValueTextSize(10f);
        data.setValueTextColor(Color.WHITE);
        //为图表设置新的数据对象
        pieChart.setData(data);
        //刷新
        pieChart.invalidate();
        //动画图上指定的动画时间轴的绘制
        pieChart.animateY(1000, Easing.EasingOption.EaseInOutQuad);
    }
}
